package com.demo.security.access;

import java.util.Collection;

import org.springframework.security.core.Authentication;

/**
 * 方法访问的后置逻辑调用
 * 为AOP提供方法调用后的处理
 * 
 * @author ryuu.kk
 *
 * @param <T>
 */
public interface AfterLogicInvocation<T> {
	
	/**
	 * 访问逻辑调用是否支持该类
	 * @param clazz 对象类
	 * @return boolean
	 */
    boolean supports(Class<?> clazz);
    
    /**
     * 访问逻辑调用是否支持Logic属性
     * @param attribute 逻辑属性
     * @return boolean
     */
    boolean supports(LogicAttribute attribute);
    
    /**
     * 访问调用后的后置处理方法
     * 将处理目标类方法执行后的逻辑处理
     * 该类目前使用安全框架的Authentication,以后将移除,使用viiso的安全封装类。
     * @param authentication 权限
     * @param object 访问对象
     * @param attributes 逻辑配置属性
     * @param resurnObject 方法访问的结果对象
     * @return Object 方法访问的结果对象(对结果不进行修改则该对象=resurnObject)
     */
    Object after(Authentication authentication, T object, Collection<LogicAttribute> attributes, Object resurnObject);
}
